package com.hwd.gmall.product.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hwd.gmall.model.product.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 后台管理页面使用的业务层接口
 *
 * @author 黄伟东/Victor
 * @date 2022/4/18 18:36
 */
public interface ManageService {

    /**
     * 查询所有的一级分类
     *
     * @return java.util.List<com.hwd.gmall.model.product.BaseCategory1>
     */
    List<BaseCategory1> listCategory1s();

    /**
     * 根据一级分类查询二级分类
     *
     * @param category1Id 一级分类id
     * @return java.util.List<com.hwd.gmall.model.product.BaseCategory2>
     */
    List<BaseCategory2> listCategory2ByCategory1Id(Long category1Id);

    /**
     * 根据二级分类id查询三级分类
     *
     * @param category2Id 二级分类id
     * @return java.util.List<com.hwd.gmall.model.product.BaseCategory3>
     */
    List<BaseCategory3> listCategory3ByCategory2Id(Long category2Id);

    /**
     * 保存平台属性
     *
     * @param baseAttrInfo 平台属性
     */
    void saveAttrInfo(BaseAttrInfo baseAttrInfo);

    /**
     * 根据分类id和分类的级别查询符合条件的平台属性列表
     *
     * @param category1Id 一级平台分类id
     * @param category2Id 二级平台分类id
     * @param category3Id 三级平台分类id
     * @return java.util.List<com.hwd.gmall.model.product.BaseAttrInfo>
     */
    List<BaseAttrInfo> listBaseAttrInfoByCategory(Long category1Id,
                                                  Long category2Id,
                                                  Long category3Id);

    /**
     * 根据平台属性名称id查询平台属性值列表
     *
     * @param attrId 平台属性名称id
     * @return java.util.List<com.hwd.gmall.model.product.BaseAttrValue>
     */
    List<BaseAttrValue> listAttrValueByAttrId(Long attrId);

    /**
     * 查询所有品牌表信息
     *
     * @return java.util.List<com.hwd.gmall.model.product.BaseTrademark>
     */
    List<BaseTrademark> listBaseTrademarks();

    /**
     * 查询所有销售属性表信息
     *
     * @return java.util.List<com.hwd.gmall.model.product.BaseSaleAttr>
     */
    List<BaseSaleAttr> listBaseSaleAttrs();

    /**
     * 保存spu的信息
     *
     * @param spuInfo spu的信息
     */
    void saveSpuInfo(SpuInfo spuInfo);


    /**
     * 分页条件查询spu的信息
     *
     * @param page        当前页数
     * @param size        没有显示条数
     * @param category3Id 三级分类id
     * @return java.util.List<com.hwd.gmall.model.product.SpuInfo>
     */
    IPage<SpuInfo> listSpuInfo(Long page, Long size, Long category3Id);

    /**
     * 根据spu的id查询spu的销售属性列表
     *
     * @param spuId spu的id
     * @return java.util.List<com.hwd.gmall.model.product.SpuSaleAttr>
     */
    List<SpuSaleAttr> listSpuSaleAttr(Long spuId);

    /**
     * 根据spu的id查询spu的图片
     *
     * @param spuId spu的id
     * @return java.util.List<com.hwd.gmall.model.product.SpuImage>
     */
    List<SpuImage> listSpuImage(Long spuId);

    /**
     * 保存sku的信息/修改sku的信息
     *
     * @param skuInfo sku信息
     */
    void saveSkuInfo(SkuInfo skuInfo);

    /**
     * 分页查询sku的信息
     *
     * @param page 当前页数
     * @param size 每页显示数量
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.hwd.gmall.model.product.SkuInfo>
     */
    IPage<SkuInfo> listSkuInfo(Long page, Long size);

    /**
     * sku上架/下架
     *
     * @param skuId      sku的id
     * @param saleStatus sku是否销售，1：是  0：否
     */
    void onSaleOrCancelSal(Long skuId, Short saleStatus);

    /**
     * 分页查询品牌列表
     *
     * @param page 当前页数
     * @param size 每页显示数量
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.hwd.gmall.model.product.BaseTrademark>
     */
    IPage<BaseTrademark> listBaseTrademarkPage(Long page, Long size);


    /**
     * 根据品牌 id 查询品牌图片
     *
     * @param id 品牌id
     * @return com.hwd.gmall.model.product.BaseTrademark
     */
    BaseTrademark getBaseTrademarkById(Long id);

    /**
     * 保存/修改商标品牌
     *
     * @param baseTrademark 商标品牌
     */
    void saveOrUpdateBaseTrademark(BaseTrademark baseTrademark);

    /**
     * 根据id删除商标品牌
     *
     * @param id 商标品牌id
     */
    void removeBaseTrademark(Long id);
}
